home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d12 / scd113.arc / SC_BASE.H < prev    next >
Text File  |  1990-06-14  |  20KB  |  592 lines

  1. /*************************************************
  2.  **                                             **
  3.  **   sc_base.h                                 **
  4.  **                                             **
  5.  **       SoftC Dbase Library common header     **
  6.  **                                             **
  7.  **         Copyright (C) 1988, 1989 by         **
  8.  **               Kim Schumann                  **
  9.  **               16820 3rd St NE               **
  10.  **               Ham Lake, MN 55304            **
  11.  **               (612) 434-6968                **
  12.  **                                             **
  13.  **             All rights reserved.            **
  14.  *************************************************/
  15.  
  16.  
  17.  
  18. /**********
  19.  *
  20.  *  Function Return Codes
  21.  *
  22.  **********/
  23.  
  24.  
  25.  
  26.  
  27. #define SC_FILENGTH   7     /* WARNING - file length is incorrect */
  28. #define SC_FLDROUND   6     /* WARNING - numeric field rounded */
  29. #define SC_FLDTRUNC   5     /* WARNING - data field truncated */
  30. #define SC_NOFIND     4     /* WARNING - could not find key in index file */
  31. #define SC_END        3     /* WARNING - no more keys */
  32. #define SC_EMPTY      2     /* WARNING - file is empty */
  33. #define SC_DELREC     1     /* WARNING - record read is marked deleted */
  34. #define SC_SUCCESS    0     /* successful function return code */
  35. #define SC_WRTFAIL    -1    /* ERROR - file write failure */
  36. #define SC_RDFAIL     -2    /* ERROR - file read failure */
  37. #define SC_MEMERR     -3    /* ERROR - memory allocation error */
  38. #define SC_SKFAIL     -4    /* ERROR - file pointer reposition failed */
  39. #define SC_NOFILE     -5    /* ERROR - file not found */
  40. #define SC_FILBAD     -6    /* ERROR - file corrupted */
  41. #define SC_BADEXPR    -7    /* ERROR - bad user specified key expression */
  42. #define SC_NOHNDL     -8    /* ERROR - no handles available */
  43. #define SC_NOPGS      -9    /* ERROR - no index pages loaded */
  44. #define SC_BADPG      -10   /* ERROR - index page was not loaded */
  45. #define SC_CLOSFAIL   -11   /* ERROR - file close failure */
  46. #define SC_BADCMD     -12   /* ERROR - invalid command */
  47. #define SC_BADHNDL    -13   /* ERROR - invalid handle number */
  48. #define SC_BADFNAME   -14   /* ERROR - invalid filename */
  49. #define SC_BADDATE    -15   /* ERROR - invalid date */
  50. #define SC_BADTIME    -16   /* ERROR - invalid time */
  51. #define SC_NODBT      -17   /* ERROR - file not in .DBT format */
  52. #define SC_DBFVERS    -18   /* ERROR - invalid dBaseIII version */
  53. #define SC_DBFHLEN    -19   /* ERROR - file header length error */
  54. #define SC_DBFDATE    -20   /* ERROR - last file change date in error */
  55. #define SC_NULLPARM   -21   /* ERROR - parameter address NULL */
  56. #define SC_BADKEYT    -22   /* ERROR - invalid key type */
  57. #define SC_KEYLEN     -23   /* ERROR - invalid key length */
  58. #define SC_ITEMLEN    -24   /* ERROR - item length incorrect */
  59. #define SC_BADROOT    -25   /* ERROR - invalid root page */
  60. #define SC_MAXKEYS    -26   /* ERROR - bad maximum number of keys per page */
  61. #define SC_FLDCNT     -27   /* ERROR - invalid number of fields */
  62. #define SC_BADFLDN    -28   /* ERROR - field name invalid */
  63. #define SC_FLDLEN     -29   /* ERROR - bad field length */
  64. #define SC_DECPL      -30   /* ERROR - decimal places parameter invalid */
  65. #define SC_BADFLDT    -31   /* ERROR - invalid field type */
  66. #define SC_RECLEN     -32   /* ERROR - invalid record length */
  67. #define SC_BADDATA    -33   /* ERROR - bad data */
  68. #define SC_LINELEN    -34   /* ERROR - memo soft line length invalid */
  69. #define SC_MDXFLAG    -35   /* ERROR - MDX flag in DBF file invalid */
  70.  
  71. #define SC_MAXWARN  7
  72. #define SC_MAXERR   -35
  73.  
  74.  
  75.  
  76.  
  77. /**********
  78.  *
  79.  *  Program Control Prototypes
  80.  *
  81.  **********/
  82.  
  83.  
  84.  
  85.  
  86. signed int scdinit( signed char );
  87. signed int scdterm( void );
  88. signed char *scdvers( void );
  89.  
  90.  
  91.  
  92.  
  93. /**********
  94.  *
  95.  *  Error Handling Prototypes
  96.  *
  97.  **********/
  98.  
  99.  
  100.  
  101. #if !defined(sceclr)
  102. #define sceclr() (sc_code = SC_SUCCESS)
  103. #endif
  104. signed char *scemsg( void );
  105.  
  106.  
  107.  
  108. /**********
  109.  *
  110.  *  Defines
  111.  *
  112.  **********/
  113.  
  114.  
  115.  
  116.  
  117. #define SC_TRUE 1
  118. #define SC_FALSE 0
  119.  
  120. /* scdrput definitions */
  121. #define SC_UPDATE 1                 /* update current record */
  122. #define SC_ADD 2                    /* add new record */
  123.  
  124. /* scdrcopy, scdrclear, scdkmake definitions */
  125. #define SC_INPUT 1                  /* input buffer */
  126. #define SC_OUTPUT 2                 /* output buffer */
  127.  
  128. /* scdkfind definitions */
  129. #define SC_FIRST 1                  /* find first key */
  130. #define SC_EXACT 2                  /* find exact key (uses record number) */
  131.  
  132. /* scdfgetmx, scdfputmx definitions */
  133. #define SC_CRUNCHNG 0               /* leave memo buffer unchanged */
  134. #define SC_CRDELETE 1               /* delete soft carriage returns */
  135.  
  136. /* scdkdatex */
  137. #define SC_DBASE 1                  /* YYYYMMDD date string */
  138. #define SC_ASCII 2                  /* MM/DD/YY or MM/DD/YYYY date string */
  139.  
  140.  
  141.  
  142.  
  143. /**********
  144.  *
  145.  *  Type Definitions
  146.  *
  147.  **********/
  148.  
  149.  
  150.  
  151.  
  152. typedef struct {  /* database field description */
  153.   signed char name[11]; /* field name */
  154.   signed char type;       /* field type
  155.                            * 'c' or 'C' - character
  156.                            * 'd' or 'D' - date
  157.                            * 'f' or 'F' - floating point (binary)
  158.                            * 'l' or 'L' - logical
  159.                            *              't' or 'T' - true
  160.                            *              'f' or 'F' - false
  161.                            *              'y' or 'Y' - yes
  162.                            *              'n' or 'N' - no
  163.                            *              '?'        - uninitialized
  164.                            * 'n' or 'N' - floating point (bcd) */
  165.   unsigned char len;      /* field width */
  166.   unsigned char decpl;    /* decimal count */
  167. } SC_FIELD;
  168.  
  169.  
  170.  
  171. typedef struct {  /* database file information packet */
  172.   signed char style;      /* file type (dBase3 or dBase4) */
  173.   signed char memo;       /* memo file required */
  174.   signed char mdx;        /* dBase4 .MDX file required (true or false) */
  175.   signed char trans;      /* dBase4 transaction in process (true or false) */
  176.   signed char encrypt;    /* dBase4 data file encrypted (true or false) */
  177. } SC_DBFINFO;
  178.  
  179. /* SC_DBFINFO style flag */
  180. #define SC_DB3 0                    /* dBase3 type data file */
  181. #define SC_DB4 1                    /* dBase4 type data file */
  182.  
  183. /* SC_DBFINFO memo flag */
  184. #define SC_USEMEMO 2                /* memo file used */
  185. #define SC_NOMEMO 0                 /* no memo file required */
  186.  
  187.  
  188.  
  189.  
  190. /**********
  191.  *
  192.  *  .DBF File Manipulator Prototypes
  193.  *
  194.  **********/
  195.  
  196.  
  197.  
  198.  
  199. signed int scddclose( signed char );    /* file handle */
  200.  
  201. signed int scddcreate(signed char *,    /* filename */
  202.                       signed int,       /* number of data fields */
  203.                       SC_FIELD *);      /* field description array */
  204.  
  205. signed int scddcreatex(signed char *,   /* filename */
  206.                       signed int,       /* number of data fields */
  207.                       SC_FIELD *,       /* field description array */
  208.                       signed char );    /* dBase version (3 or 4) */
  209.  
  210. signed int scddinfo(  signed char,      /* file handle */
  211.                       signed char *,    /* filename */
  212.                       SC_DBFINFO * );   /* file information & status */
  213.  
  214. signed int scddopen(  signed char *,    /* file handle */
  215.                       signed char * );  /* filename */
  216.  
  217. signed int scddopenx( signed char *,    /* file handle */
  218.                       signed char *,    /* filename */
  219.                       SC_DBFINFO * );   /* file information */
  220.  
  221. signed int scddsize(  signed char,      /* file handle */
  222.                       signed long * );  /* number of data records */
  223.  
  224.  
  225.  
  226.  
  227. /**********
  228.  *
  229.  *  .DBF Field Manipulator Prototypes
  230.  *
  231.  **********/
  232.  
  233.  
  234.  
  235.  
  236. signed int scdfget(   signed char,      /* file handle */
  237.                       signed int,       /* field number */
  238.                       void * );         /* buffer for field data */
  239.  
  240. signed int scdfgets(  signed char,      /* file handle */
  241.                       signed int,       /* field number */
  242.                       char * );         /* buffer for field data */
  243.  
  244. signed int scdfgetsx( signed char,      /* file handle */
  245.                       signed int,       /* field number */
  246.                       char *,           /* buffer for field data */
  247.                       signed int );     /* I/O buffer to be used */
  248.  
  249. signed int scdfgett(  signed char,      /* file handle */
  250.                       signed long,      /* record number */
  251.                       signed char ** ); /* buffer for record data */
  252.  
  253. signed int scdfgettx( signed char,      /* file handle */
  254.                       signed long,      /* record number */
  255.                       signed char **,   /* buffer for record number */
  256.                       signed int );     /* remove soft carriage returns? */
  257.  
  258. signed int scdfgetx(  signed char,      /* file handle */
  259.                       signed int,       /* field number */
  260.                       void *,           /* buffer for field data */
  261.                       signed int );     /* I/O buffer to be used */
  262.  
  263. signed int scdfinfo(  signed char,      /* file handle */
  264.                       signed int *,     /* length of longest field */
  265.                       SC_FIELD * );     /* field description array */
  266.  
  267. signed int scdfnam2no(signed char,      /* file handle */
  268.                       signed int *,     /* field number */
  269.                       signed char *);   /* field name */
  270.  
  271. signed int scdfput(   signed char,      /* file handle */
  272.                       signed int,       /* field number */
  273.                       void * );         /* buffer for field data */
  274.  
  275. signed int scdfputs(  signed char,      /* file handle */
  276.                       signed int,       /* field number */
  277.                       char * );         /* buffer for field data */
  278.  
  279. signed int scdfputsx( signed char,      /* file handle */
  280.                       signed int,       /* field number */
  281.                       char *,           /* buffer for field data */
  282.                       signed int );     /* I/O buffer to be used */
  283.  
  284. signed int scdfputt(  signed char,      /* file handle */
  285.                       signed long *,    /* record number */
  286.                       signed char * );  /* buffer for record data */
  287.  
  288. signed int scdfputtx( signed char,      /* file handle */
  289.                       signed long *,    /* record number */
  290.                       signed char *,    /* buffer for record data */
  291.                       signed int );     /* insert soft carriage returns? */
  292.  
  293. signed int scdfputx(  signed char,      /* file handle */
  294.                       signed int,       /* field number */
  295.                       void *,           /* buffer for field data */
  296.                       signed int );     /* I/O buffer to be used */
  297.  
  298.  
  299.  
  300.  
  301. /**********
  302.  *
  303.  *  .DBF Record Manipulator Prototypes
  304.  *
  305.  **********/
  306.  
  307.  
  308.  
  309.  
  310. signed int scdrclear( signed char,      /* file handle */
  311.                       signed int );     /* which I/O buffer to clear */
  312.  
  313. signed int scdrcopy(  signed char,      /* file handle */
  314.                       signed int );     /* which I/O buffer to copy */
  315.  
  316. signed int scdrdel(   signed char,      /* file handle */
  317.                       signed long );    /* record number to delete */
  318.  
  319. signed int scdrget(   signed char,      /* file handle */
  320.                       signed long );    /* record number to read */
  321.  
  322. signed int scdrinfo(  signed char,      /* file handle */
  323.                       signed int *,     /* record length */
  324.                       signed int *,     /* number of data fields */
  325.                       void **,          /* input buffer address */
  326.                       void ** );        /* output buffer address */
  327.  
  328. signed int scdrput(   signed char,      /* file handle */
  329.                       signed long *,    /* record number */
  330.                       signed int );     /* append or update record */
  331.  
  332. signed int scdrundel( signed char,      /* fiel handle */
  333.                       signed long );    /* record number */
  334.  
  335.  
  336.  
  337.  
  338. /**********
  339.  *
  340.  *  dBase3 .DBT File Manipulator Prototypes
  341.  *
  342.  **********/
  343.  
  344.  
  345.  
  346.  
  347. signed int scdtclose( signed char );    /* file handle */
  348.  
  349. signed int scdtcreate(signed char * );  /* filename */
  350.  
  351. signed int scdtinfo(  signed char,      /* file handle */
  352.                       signed char * );  /* filename */
  353.  
  354. signed int scdtopen(  signed char *,    /* file handle */
  355.                       signed char * );  /* filename */
  356.  
  357.  
  358.  
  359.  
  360. /**********
  361.  *
  362.  *  .NDX File Manipulators Prototypes
  363.  *
  364.  **********/
  365.  
  366.  
  367.  
  368.  
  369. signed int scdnclose( signed char );    /* file handle */
  370.  
  371. signed int scdncreate(signed char *,    /* filename */
  372.                       signed char,      /* index key type */
  373.                       signed char *,    /* key expression */
  374.                       signed char );    /* key length */
  375.  
  376. signed int scdnexpr(  signed char,      /* file handle */
  377.                       signed char * );  /* key expression */
  378.  
  379. signed int scdninfo(  signed char,      /* file handle */
  380.                       signed char *,    /* filename */
  381.                       signed char *,    /* index key type */
  382.                       signed char *,    /* key length */
  383.                       signed int * );   /* expression length */
  384.  
  385. signed int scdnopen(  signed char *,    /* file handle */
  386.                       signed char * );  /* filename */
  387.  
  388.  
  389.  
  390.  
  391. /**********
  392.  *
  393.  *  .NDX Key Building Prototypes
  394.  *
  395.  **********/
  396.  
  397.  
  398.  
  399.  
  400. signed int scdkdate(  double *,         /* numeric date (for key) */
  401.                       signed char * );  /* date string (YYYYMMDD) */
  402.  
  403. signed int scdkdatex( double *,         /* numeric date */
  404.                       signed char *,    /* date string */
  405.                       signed int );     /* date string format type */
  406.  
  407. signed int scdkmake(  signed char,      /* .DBF file handle */
  408.                       signed char,      /* .NDX file handle */
  409.                       void ** );        /* index key */
  410.  
  411. signed int scdkmakex( signed char,      /* .DBF file handle */
  412.                       signed char,      /* .NDX file handle */
  413.                       void **,          /* index key */
  414.                       signed int );     /* which I/O buffer to use */
  415.  
  416.  
  417.  
  418.  
  419. /**********
  420.  *
  421.  *  .NDX Key Manipulator Prototypes
  422.  *
  423.  **********/
  424.  
  425.  
  426.  
  427.  
  428. signed int scdkadd(   signed char,      /* file handle */
  429.                       signed char *,    /* key string */
  430.                       signed long );    /* data record number */
  431.  
  432. signed int scdkcur(   signed char,      /* file handle */
  433.                       signed char *,    /* key string */
  434.                       signed long *);   /* data record number */
  435.  
  436. signed int scdkdel(   signed char,      /* file handle */
  437.                       signed char *,    /* key string */
  438.                       signed long );    /* data record number */
  439.  
  440. signed int scdkfirst( signed char,      /* file handle */
  441.                       signed char *,    /* key string */
  442.                       signed long *);   /* data record number */
  443.  
  444. signed int scdkfind(  signed char,      /* file handle */
  445.                       signed char *,    /* key string */
  446.                       signed long *,    /* data record number */
  447.                       signed int);      /* exact match or first */
  448.  
  449. signed int scdklast(  signed char,      /* file handle */
  450.                       signed char *,    /* key string */
  451.                       signed long *);   /* data record number */
  452.  
  453. signed int scdknext(  signed char,      /* file handle */
  454.                       signed char *,    /* key string */
  455.                       signed long *);   /* data record number */
  456.  
  457. signed int scdkprev(  signed char,      /* file handle */
  458.                       signed char *,    /* key string */
  459.                       signed long *);   /* data record number */
  460.  
  461.  
  462.  
  463.  
  464. /**********
  465.  *
  466.  *  .NDX Page Manipulator Prototypes
  467.  *
  468.  **********/
  469.  
  470.  
  471.  
  472.  
  473. signed int scdnpinfo( signed char,      /* file handle */
  474.                       signed char *);   /* number of index pages loaded */
  475.  
  476. signed int scdnpnum(  signed char,      /* file handle */
  477.                       signed char * );  /* new number of index pages */
  478.  
  479.  
  480.  
  481.  
  482. /**********
  483.  *
  484.  *  Calendar Definitions
  485.  *
  486.  **********/
  487.  
  488.  
  489.  
  490.  
  491. /* sccdxlat */
  492. #define SC_2DBASE 1         /* convert from "mm/dd/[yy]yy" to "yyyymmdd" */
  493. #define SC_2ASCII 8         /* convert from "yyyymmdd" to "mm/dd/yy" */
  494. #define SC_2ASCIIL 10       /* convert from "yyyymmdd" to "mm/dd/yyyy" */
  495.  
  496.  
  497.  
  498.  
  499. /**********
  500.  *
  501.  *  Calendar Prototypes
  502.  *
  503.  **********/
  504.  
  505.  
  506.  
  507.  
  508. signed int sccday(    signed char *,      /* day of week text string */
  509.                       signed char);       /* numeric day of week */
  510.  
  511. signed int sccddiff(  signed long *,      /* difference in days */
  512.                       signed char *,      /* date string (YYYYMMDD) */
  513.                       signed char *);     /* date string */
  514.  
  515. signed int sccdl2s(   signed char *,      /* date string */
  516.                       signed long);       /* number of days since 1/1/00 */
  517.  
  518. signed int sccdn2s(   signed char *,      /* date string (YYYYMMDD) */
  519.                       signed int,         /* year */
  520.                       signed int,         /* month */
  521.                       signed int );       /* day */
  522.  
  523. signed int sccdperm(  signed char *,      /* number of days in month */
  524.                       signed char *);     /* date string (YYYYMMDD) */
  525.  
  526. signed int sccdpermi( signed char *,      /* number of days in month */
  527.                       signed int,         /* desired year */
  528.                       signed int);        /* desired month */
  529.  
  530. signed int sccds2l(   signed long *,      /* number of days since 1/1 0001 */
  531.                       signed char * );    /* date string (YYYYMMDD) */
  532.  
  533. signed int sccds2n(   signed int *,       /* year */
  534.                       signed int *,       /* month */
  535.                       signed int *,       /* day */
  536.                       signed char * );    /* date string (YYYYMMDD) */
  537.  
  538. signed int sccdvalid( signed char * );    /* date string (YYYYMMDD) */
  539.  
  540. signed int sccdxlat(  signed char *,      /* converted date string */
  541.                       signed char *,      /* source date string */
  542.                       signed int );       /* conversion method */
  543.  
  544. signed int sccleap(   signed char * );    /* date string (YYYY[MMDD]) */
  545.  
  546. signed int sccleapi(  signed int );       /* year */
  547.  
  548. signed int sccmonth(  signed char *,      /* month text string */
  549.                       signed char);       /* numeric month */
  550.  
  551.  
  552.  
  553.  
  554. /**********
  555.  *
  556.  *  Clock Prototypes
  557.  *
  558.  **********/
  559.  
  560.  
  561.  
  562.  
  563. signed int scctdiff(  signed int *,       /* number of seconds difference */
  564.                       signed char *,      /* time 1 (HH:MM:SS) */
  565.                       signed char *);     /* time 2 */
  566.  
  567. signed int scctn2s(   signed char *,      /* time string (HH:MM:SS) */
  568.                       signed int,         /* hours */
  569.                       signed int,         /* minutes */
  570.                       signed int);        /* seconds */
  571.  
  572. signed int sccts2n(   signed int *,       /* hours */
  573.                       signed int *,       /* minutes */
  574.                       signed int *,       /* seconds */
  575.                       signed char *);     /* time string (HH:MM:SS) */
  576.  
  577. signed int scctvalid( signed char * );    /* time string (HH:MM:SS) */
  578.  
  579.  
  580.  
  581.  
  582. /**********
  583.  *
  584.  *  External Variables
  585.  *
  586.  **********/
  587.  
  588.  
  589.  
  590.  
  591. extern signed int sc_code;      /* function result code */
  592. extern signed int sc_softlen;   /* memo line length */